package socket;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

/**
 * 聊天案例客户端
 */
public class Client {
    private Socket socket;

    /**
     * 构造方法用于初始化客户端
     */
    public Client(){
        try {
            /*
                实例化Socket时需要指定两个信息
                1:服务端IP地址，如果链接的是本机，则使用localhost即可
                2:服务端口，用来找到运行在服务端计算机上的服务端应用程序

                实例化Socket的过程就是与服务端建立链接的过程，如果链接失败
                则会抛出异常
             */
            System.out.println("正在链接服务端...");
            socket = new Socket("localhost",8088);
            System.out.println("与服务端建立链接!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 客户端开始工作的方法
     */
    public void start(){
        try {
            /*
                Socket提供的重要方法:
                OutputStream getOutputStream()
                该方法用于获取一个字节输出流，用于向服务端发送数据
             */
            OutputStream out = socket.getOutputStream();
//            //向服务端发送一个字节数据:00000001
//            out.write(1);

            Scanner scanner = new Scanner(System.in);
            while(true) {
                String line = scanner.nextLine();
                if("exit".equals(line)){
                    break;
                }
                byte[] data = line.getBytes(StandardCharsets.UTF_8);
                //首先将该数组长度发送给服务端，告知本次一共要发送多少字节
                //write(int)
                out.write(data.length);//发送一个字节
                //write(byte[])
                out.write(data);//再将字符串转换的所有字节发送给服务端
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                /*
                    当通讯完毕时，希望与对方断开链接应当调用close方法
                    1:close方法会关闭字节输入流和字节输出流
                    2:与对方进行四次挥手
                 */
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    public static void main(String[] args) {
        Client client = new Client();
        client.start();
    }
}












